AliAnalysisTask *AddTask_xlu_pkRaa()
{
  //leave it open to edit
  const Bool_t kMC = 
  const Bool_t kPbPb = 

  printf("\n!!!!!!!!!!!!!!!!!!!!!!!!! remember to set kMC and kPbPb!! %d %d !!!!!!!!!!!!!!!!!!!!\n\n\n", kMC, kPbPb);

  char *tkn0 = "pkRaa";
  //---  
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    mgr = new AliAnalysisManager();
    mgr->SetInputEventHandler(new AliESDInputHandler);

    if(!mgr){
      Error(Form("AddTask_xlu_%s",tkn0), "No analysis manager found.");
      return 0;
    }
  }

  //this is for sure needed! ===============================================>
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
  Long_t r = gROOT->ProcessLine(Form("AddTaskPhysicsSelection(%d)", kMC));
  AliPhysicsSelectionTask *physSelTask = reinterpret_cast<AliPhysicsSelectionTask*>(r);
  if(!physSelTask) { printf("no physSelTask"); exit(1); }

  //PID
  //===>
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
  Long_t r = gROOT->ProcessLine(Form("AddTaskPIDResponse(%d)", kMC));
  AliAnalysisTask *pidTask = reinterpret_cast<AliAnalysisTask*>(r);
  if(!pidTask) { printf("no pidTask"); exit(1); }
  //<===

  if(kPbPb){
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
    r = gROOT->ProcessLine("AddTaskCentrality()");
    AliCentralitySelectionTask *taskCentrality = reinterpret_cast<AliCentralitySelectionTask*>(r);
    if(!taskCentrality) { printf("no taskCentrality"); exit(1); }
    if(kMC){
      taskCentrality->SetMCInput(); 
    }
  }

  if(kMC){
    AliMCEventHandler* mcHandler = new AliMCEventHandler();
    mgr->SetMCtruthEventHandler(mcHandler);
    //TR track reference
    mcHandler->SetReadTR(0); 
  }
  //<=======================================================================

  AliAnalysisTaskpkRaa *mytask = new AliAnalysisTaskpkRaa;
  mytask->SelectCollisionCandidates(AliVEvent::kMB);
  mgr->AddTask(mytask);

  //---  
  AliAnalysisDataContainer *cinput  = mgr->GetCommonInputContainer();
  mgr->ConnectInput(mytask,  0, cinput );
  
  const TString foutname=Form("xlu_%s.root",tkn0);

  AliAnalysisDataContainer *outlist1 = mgr->CreateContainer("xlu_tree",            TTree::Class(), AliAnalysisManager::kOutputContainer,foutname);
  AliAnalysisDataContainer *outlist2 = mgr->CreateContainer("xlu_list",            TList::Class(), AliAnalysisManager::kOutputContainer,foutname);
  AliAnalysisDataContainer *outlist3 = mgr->CreateContainer("xlu_mctree",          TTree::Class(), AliAnalysisManager::kOutputContainer,foutname);

  //in AnalysisTaskSE, slot 0 reserved, must start from 1
  mytask->ConnectOutput(1, outlist1);
  mytask->ConnectOutput(2, outlist2);
  mytask->ConnectOutput(3, outlist3);
  return mytask;
}
